// 导入axios
import axios from 'axios';
// 导入ElMessage（信息提示框）
import { ElMessage } from 'element-plus';
// 导入tokenStore（pinia）
import { useTokenStore } from '@/stores/token.js';
// 引入router
import router from '@/router/index.js';

// 定义公共前缀
const baseURL = '/api';
// 创建axios自带instance实例
const instance = axios.create({ baseURL });

/**
 * 请求拦截器
 */
instance.interceptors.request.use(
  config => {
    // 1.获取store
    const tokenStore = useTokenStore();
    // 2.判断是否有token
    if (tokenStore.token) {
      // 3.在请求头中携带token
      config.headers.Authorization = tokenStore.token;
    } else if (config.url !== '/user/login' && config.url !== '/user/register'){
      ElMessage.warning('login first');
      router.push('/');
      return Promise.reject('without login');
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  },
);

/**
 * 响应拦截器
 */
instance.interceptors.response.use(
  result => {
    if (result.data.code === 0) {
      return result.data;
    }
    ElMessage.error(result.data.message ? result.data.message : '服务异常');
    //异步的状态转化成失败的状态，同步等待调用时，则执行不到后续操作
    return Promise.reject(result.data.message ? result.data.message : '服务异常');
  },
  error => {
    // 判断响应状态码是否为401，如果是则跳转到登录页面
    if (error.response.status === 401) {
      ElMessage.error('请先登录');
      router.push('/');
    } else {
      ElMessage.error('服务异常');
    }
    //异步的状态转化成失败的状态
    return Promise.reject(error);
  },
);

export default instance;
